//
// Created by Cammy on 2024/4/24.
//

#ifndef C_DATASTRUCT_BIDLIST_H
#define C_DATASTRUCT_BIDLIST_H

#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#include <stdbool.h>

/**
 * 1.无头单向非循环：结构简单，一般不会单独用来存数据，实际中更多的作为其他数据结构的子结构，笔试面试中出现的多
 * 2.带头双向循环：结构最复杂，一般用在单独存储数据，实际中使用链表的数据结构都是这个
 */

typedef int BidListType;

typedef struct BidListNode {
    struct BidListNode *prev;
    struct BidListNode *next;
    BidListType data;
} BidListNode;

BidListNode *ListInit();

void ListDestroy(BidListNode *phead);

void ListPrint(BidListNode *phead);

void ListPushBack(BidListNode *phead, BidListType x);

void ListPushFront(BidListNode *phead, BidListType x);

void ListPopBack(BidListNode *phead);

void ListPopFront(BidListNode *phead);

BidListNode *ListFind(BidListNode *phead, BidListType x);

// pos位置之前插入x
void ListInsert(BidListNode *pos, BidListType x);

// 删除pos位置的值
void ListErase(BidListNode *pos);

// 判空
bool isEmpty(BidListNode *phead);

// 长度
int Size(BidListNode *phead);

#endif //C_DATASTRUCT_BIDLIST_H
